【短期企画】触ったことのないAWSサービスを触っていくぞ -ECS編-
ごあいさつ
ゲストブロガーとして投稿させていただくことになりました。
豊崎隆です。
自己紹介
某会社でインフラエンジニアをしております。
この度、ご縁がありましてブログを投稿させて頂くことになりました。
よろしくお願いします。
触ったことのないAWSサービスを触っていくぞのコーナー
短期企画(勝手につくりました)
「触ったことのないAWSサービスを触っていくぞのコーナー」を担当させていただきます。
では、さっそく始めたいと思います。
今回の触っていくぞ
Amazon ECS(Amazon EC2 Container Service)
ECSとは?
コンテナを管理してれるマネージドサービス
– シンプルなAPIで、EC2クラスタ上にDockerコンテナを起動/管理
– Docker管理で面倒な所を取り除くために出来たサービス
– EC2インスタンス上に複数コンテナをホストすることが可能
– クラスタの管理や構成管理についての運用が不要
ECS用語
クラスター | ECSインスタンスを管理 複数のサービスを管理 |
ECS インスタンス | ECSエージェントが稼働するEC2インスタンス |
サービス | 複数のタスクを管理 タスク定義と紐づける |
タスク定義 | タスクに含めるコンテナの定義とコンテナ間のやり取りの方法を指定する |
タスク | タスク定義で定めた内容を実行する単位 |
コンテナの定義 | 利用するDockerImageやImageを実行するリソースの割り当てを指定する |
料金
作成した AWS リソース(EC2 インスタンス、EBS ボリュームなど)に対してのみ料金が発生します。
AWSマネジメントコンソールから使ってみる
今すぐ始めるから進むと「サンプルアプリケーションのデプロイ」と
「Amazon ECRの作成」(※1)が選択できるので、このまま進めてみます。
ECRのリポジトリを作成します。
作成したリポジトリにDockerImageをプッシュします。
※ローカルにDockerImageのない人は画面の指示に従ってImageを作成する。
タスク定義では管理するコンテナの定義などを行います。
サンプルアプリケーションのデプロイウィザードなので、コンテナが1つしか選択できませんが、
ウィザードでなければ複数のコンテナが指定できます。
Dockerイメージの選択と、Dockerホストとコンテナのポートマッピング設定のみ行い、
あとはデフォルトで作成をしていきます。
サービスの設定では定義した内容のタスクの実行数やELBの設定を行います。
タスク数は冗長化をさせたいので「2」とします。
ELBのリスナープロトコルと、リスナーポートとIAMロールを設定します。
ECS用のIAMロールがない場合は自動的に作成されます。
(サービスIAMロールはクラスタに付与してECSインスタンスをELBへのAssociateする等に使用)
クラスタの設定ではECSインスタンスの設定を行います。
タスクの実行数(固定ポート利用数)>ECSインスタンス数
となっているので、怒られています。(※2)
インスタンス数を2にすると警告が消えます。
(このままでも作成を継続できますがタスクが使用するポートが足りずにタスクが1つしか起動しません)
また、SGやIAMロールの設定もここで行います。
今回はデフォルトのまま進んで行きます。
ここでも同様にECSインスタンス用のIAMロールがない場合は自動作成されます。
(ECSインスタンスIAMロールはECS Agentが実行するAPIアクションに使用)
設定を確認し、起動してみます。
ServiceがActiveになっていることを確認し、作成されたELBに接続してみます。
無事、WEBページが表示されました。
タスクを停止してから次のタスクが起動するまでの時間を確認
コンテナの起動がどれくらい早いのか確認してみたいと思います。
タスクを選択して、停止します。
停止されてタスクが1つになりました。
画面の更新を連打していると、すぐにRUNNINGになりました。
この間、たったの21秒です。
実際にはELB側のヘルスチェックがあるので、
ELBでInServiceになるまではもう少しかかりますが、それでも早い!
蛇足ですが、ウィザードで作成されたELBのヘルスチェックは30秒間隔、正常の閾値2回でした。
(ELBを作成するときのデフォルトは30秒間隔、正常の閾値10回)
まとめ
コンテナでの起動時間の早さに驚きました。
やはりサーバでのスケールとは時間的に比較になりませんね。
ECSの表層を触っただけですが、すこし雰囲気はつかめたんじゃないでしょうか。
触っていない設定などがまだまだあるので、もう少し詳しく触っていきたいです。
また、改めて書きたいと思います。
以上、「触ったことのないAWSサービスを触っていくぞのコーナー」でした。
お付き合いありがとうございました。
脚注
※1:DockerHubのAWSサービス版(private)
※2:ECSインスタンス1つに対して80番Portは1つしかないんだから、
タスク2つは、無理っしょ。と言われている模様